const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin'); // 导入 HtmlWebpackPlugin 插件
const TerserPlugin = require('terser-webpack-plugin');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;

module.exports = {
    mode: 'development', // 开发模式
    entry: './src/main.js', // 入口文件
    devtool: 'inline-source-map', // 生成 source map 文件
    output: {
        filename: 'bundle.[contenthash].js', // 输出文件名
        path: path.resolve(__dirname, 'dist'), // 输出路径
    },
    optimization: {
        minimize: true, // 开启代码压缩
        minimizer: [
            new TerserPlugin(),
        ],
    }, 
    plugins: [
        new HtmlWebpackPlugin({
            title: 'webpack入门学习', // 页面标题
            template: './index.html', // 指定模板文件
            filename: 'index.html', // 输出文件名
        }),
        // new TerserPlugin(), // 压缩 JS 代码
        new BundleAnalyzerPlugin(), // 生成打包文件分析报告
    ],
    devServer: {
        static: './dist',
    }, // 开发服务器配置
    module: {
        rules: [
            {
                test: /\.css$/i, // 匹配 CSS 文件
                use: ['style-loader', 'css-loader'], // 使用 style-loader 和 css-loader
            },
            {
                test: /\.(png|jpg|gif)$/i, // 匹配图片文件
                type: 'asset/resource', // 使用 webpack 内置的资源模块
            },
            // {
            //     test: /\.html$/, // 匹配 HTML 文件
            //     use: 'html-loader',
            // },
            {
                test: /\.(js|jsx)$/, // 匹配 JS 或 JSX 文件
                exclude: /node_modules/, // 排除 node_modules 目录
                use: {
                    loader: 'babel-loader', // 使用 babel-loader
                    options: {
                        presets: ['@babel/preset-env'], // 使用 @babel/preset-env 预设
                    },
                },
            },
        ],
    },
    resolve: {
        alias: {
            '@': path.resolve(__dirname, 'src'), // 配置别名
        },
    }
};